IB/FB - zjisteni pridani zaznamu v tabulce bez eventu - velke vytizeni procesoru
Otázka od: Ing. Jiri Sokol
11. 11. 2004 11:05
procesoru
Ahoj panove!
Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a potrebuju v
aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu. Protoze pouzivam
FB server 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s
eventama, chci tento ukol resit v aplikaci.
Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo alespon pri
3.600.000 zaznamech...
Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu
hodnotu ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a
vic procent
Tak jsem si rikal, ze ma problem s tim, prejit na ten posledni zaznam. Tak jsem
zkusil zmenit prikaz z vyhledavani "last" na "max(id)", ale vysledek - vytizeni
FB serveru je porad nad 90%.
Muzete mi nekdo, prosim, poradit?
Diky
Jirka
P.S.:
"last":
select first (1) cas from tabulka order by id desc
"max(id)":
select max(id) from tabulka
K provedeni tech SQL dotazu pouzivam kompenentu IBSQL - udelam si prepare a pak
v timeru uz jenom provadim "ExecQuery".
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.1
programator amater
Odpovedá: Petr Kralik
11. 11. 2004 12:03
vytizeni procesoru
Hmmm,
Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
ID's.
Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a zjistene ID's
bys po sebe mazal...
*krz
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Ing. Jiri Sokol
Sent: Thursday, November 11, 2004 11:06 AM
To: delphi-l@clexpert.cz
Subject: IB/FB - zjisteni pridani zaznamu v tabulce bez eventu - velke
vytizeni procesoru
Ahoj panove!
Mam naprosto trivialni problem, ale nejak se mi nedari vyresit. Mam
tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a
potrebuju v aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu.
Protoze pouzivam FB server 1.5.1, o kterem se tady psalo, ze ma jeste
nejake problemy s eventama, chci tento ukol resit v aplikaci. Tabulka ma
za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca 1.800.000.
Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo
alespon pri 3.600.000 zaznamech... Myslel jsem si, ze mi bude stacit
zobrazit posledni zaznam a z nej si vytahnu hodnotu ze sloupce ID.
prikaz jsem mel napsan dobre, fungovalo to, ale ja to potrebuju
proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a vic
procent Tak jsem si rikal, ze ma problem s tim, prejit na ten
posledni zaznam. Tak jsem zkusil zmenit prikaz z vyhledavani "last" na
"max(id)", ale vysledek - vytizeni FB serveru je porad nad 90%. Muzete
mi nekdo, prosim, poradit? Diky Jirka
P.S.:
"last":
select first (1) cas from tabulka order by id desc
"max(id)":
select max(id) from tabulka
K provedeni tech SQL dotazu pouzivam kompenentu IBSQL - udelam si
prepare a pak v timeru uz jenom provadim "ExecQuery".
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.1
programator amater
Odpovedá: Karel Rys
11. 11. 2004 12:03
vytizeni procesoru
Ing. Jiri Sokol dne 11 Nov 2004 v 11:05:
> Ahoj panove!
> Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
> Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a
> potrebuju v aplikaci zjistit, ze v teto tabulce doslo k pridani
> zaznamu. Protoze pouzivam FB server 1.5.1, o kterem se tady psalo, ze
> ma jeste nejake problemy s eventama, chci tento ukol resit v aplikaci.
> Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
> 1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech
> uchovavat dva posledni roky -> musim to vyresit tak, aby to
> bezproblemu slapalo alespon pri 3.600.000 zaznamech... Myslel jsem si,
> ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu hodnotu
> ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
> potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni
> na 90 a vic procent Tak jsem si rikal, ze ma problem s tim, prejit
> na ten posledni zaznam. Tak jsem zkusil zmenit prikaz z vyhledavani
> "last" na "max(id)", ale vysledek - vytizeni FB serveru je porad nad
> 90%. Muzete mi nekdo, prosim, poradit? Diky Jirka
Ahoj,
nesel by pouzit trigger after insert, ktery by do nejake jine, pomocne tabulky
zapsal
datum/cas/id, kdy doslo k te posledni zmene? aplikace by si tak datum/cas/id
posledniho zaznamu
vytahla primitivnim selectem skoro okamzite.
Karel Rys
Odpovedá: Daniel Frantik
11. 11. 2004 11:49
vytizeni procesoru
Co treba udelat trigger nad tou tabulkou, ktery to nekam zapise?
Danik
> -----Original Message-----
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Ing. Jiri Sokol
> vyresit. Mam tabulku, v te tabulce mam sloupec ID, nad kterym
> mam i index, a potrebuju v aplikaci zjistit, ze v teto
> tabulce doslo k pridani zaznamu. Protoze pouzivam FB server
Odpovedá: Tomas Michalik
11. 11. 2004 11:36
vytizeni procesoru
Ing. Jiri Sokol wrote:
> Ahoj panove!
> Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
> Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a potrebuju
v aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu. Protoze pouzivam
FB server 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s
eventama, chci tento ukol resit v aplikaci.
> Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo alespon pri
3.600.000 zaznamech...
> Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu
hodnotu ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a
vic procent
> Tak jsem si rikal, ze ma problem s tim, prejit na ten posledni zaznam. Tak
jsem zkusil zmenit prikaz z vyhledavani "last" na "max(id)", ale vysledek -
vytizeni FB serveru je porad nad 90%.
> Muzete mi nekdo, prosim, poradit?
Pri hledani maximalni hodnoty potrebujes descending index.
To by melo pomoct.
Tom
> Diky
> Jirka
>
> P.S.:
> "last":
> select first (1) cas from tabulka order by id desc
>
> "max(id)":
> select max(id) from tabulka
========================
Tomas Michalik
vyvoj IS
ProCA, spol. s r.o.
V Luzich 818
Praha 4 - Libus
140 00, Czech Republic
tel: +420 234646446
fax: +420 234646120
michalik@proca.cz
http://www.proca.cz
Odpovedá: Slavomir Skopalik
11. 11. 2004 12:32
vytizeni procesoru
> Mam naprosto trivialni problem, ale nejak se mi nedari
> vyresit. Mam tabulku, v te tabulce mam sloupec ID, nad kterym
> mam i index, a potrebuju v aplikaci zjistit, ze v teto
> tabulce doslo k pridani zaznamu. Protoze pouzivam FB server
> 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s
Proc nezkusis FB 1.5.2 (zatim sice pouze RC, ale asi bude prohlasen za
final) ?
> eventama, chci tento ukol resit v aplikaci. Tabulka ma za cca
> 3 mesice provozu uz okolo 450.000 -> za rok bude cca
> 1.800.000. Lze predpokladat, ze si zakaznici budou chtit v
> datech uchovavat dva posledni roky -> musim to vyresit tak,
> aby to bezproblemu slapalo alespon pri 3.600.000 zaznamech...
> Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a
> z nej si vytahnu hodnotu ze sloupce ID. prikaz jsem mel
> napsan dobre, fungovalo to, ale ja to potrebuju proklepavat
> tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a vic
2x za sekundu, neprehanis to trochu ?
> procent Tak jsem si rikal, ze ma problem s tim, prejit na
> ten posledni zaznam. Tak jsem zkusil zmenit prikaz z
> vyhledavani "last" na "max(id)", ale vysledek - vytizeni FB
> serveru je porad nad 90%. Muzete mi nekdo, prosim, poradit? Diky Jirka
A neni jednodussi si udelat aplikacni server + UDF ?
Tohle periodicky dotazovani by mohlo serveru pekne zavarit.
Navic si dokazu predstavit situaci, kdy to selze.
Treba:
mas dva klienty (predpokladam, zi vice).
Kazdy z nich s vyzvedne cislo z generatoru, ale ten z vissim cislem ho
tam zapise
drive a ten z nizsim ho tam zapise pozdeji.
-> po ten druhy pripad NEVZNIKNE udalost.
Slavek
Odpovedá: Richard Kejval
11. 11. 2004 13:01
vytizeni procesoru
Petr Kralik pise :
> Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
>
ID's.
> Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a zjistene ID's
> bys po sebe mazal...
Neni treba zadnou vytvaret, protoze uz existuje v RDB$Generators
S pozdravem
ing. Richard Kejval
mobil: 602477679
http://www.icsoftware.cz
Odpovedá: Petr Kralik
11. 11. 2004 13:56
vytizeni procesoru
Pokud jde jen o posledni ID, lze to velice jednoduse
SELECT GEN_ID("nazev_generatoru", 0) FROM RDB$DATABASE;
Jestli bys pozadoval od event dalsi data, jako kdo to zapsal a
blablabla, ta externi tabulka by, dle meho nazoru, byla nejjdednodussim
resenim...
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Richard Kejval
Sent: Thursday, November 11, 2004 12:42 PM
To: delphi-l@clexpert.cz
Subject: Re: IB/FB - zjisteni pridani zaznamu v tabulce bez eventu -
velke vytizeni procesoru
Petr Kralik pise :
> Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
>
ID's. Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a
> zjistene ID's
bys po sebe mazal...
Neni treba zadnou vytvaret, protoze uz existuje v RDB$Generators
S pozdravem
ing. Richard Kejval
mobil: 602477679
http://www.icsoftware.cz